/**
 * Created with IntelliJ IDEA.
 * Description :
 * User: $ {USER}
 * Date: $ {YEAR}-$ {MONTH}一$ { DAY}
 * Time: ${ TIME}
 */
/**
 * 状态：
 * 今天是2024年5月15日
 * 开始了大学的第一个正式的flag：和三叶姐一起 刷穿LeetCode
 * LeetCode刷题——回文数
 *
 * 思路：
 * 本题比较简单，直接采用暴力求解。把每一个数的每一位保存在一个整型数组中，
 * 然后在通过判断回文数的规则来进行判断是否为回文数即可。
 *
 * 多种思路：
 * 1. 采用字符串双指针法来解决
 */
public class Test {
    public static boolean isPalindrome(int x) {
        if (x < 0) {
            return false;
        }
        int tmp = x;
        int[] ret = new int[100];
        int i = 0;
        while (tmp != 0) {
            ret[i++] = tmp % 10;
            tmp /= 10;
        }
        int count = i-1;
        int sum = 0;
        for (int j = 0; j < i; j++) {
            // 通过权重把每一位取出来

            // 这里的 += 会被编译器自动转换为int，因为double对应的值已经大于int的最大值了。
            // 因此每一次相加double是在变化，但是强转之后的int却总是int的最大值。
            // 也就是我们看到的那样：sum的值，每一次都保持不变
            sum += Math.pow(10, count--) * ret[j];

            // 当和已经超过了整型最大值，并且还没有加完，那么这个就肯定不是回文数了
            if (sum >= 2147483647 && count != 0) {
                return false;
            }
        }
        return x == sum;
    }

    public static void main(String[] args) {
        System.out.println(isPalindrome(2147483647));


        /*int a = Integer.MAX_VALUE;
        int b = 1;
        int result = a + b; // 这里result将不是Integer.MAX_VALUE + 1，而是Integer.MIN_VALUE
        System.out.println(result);*/
    }
}
